Описание
Создает новый объект Recordset и добавляет его в семейство
Recordsets.
Для объектов Connection и Database: Set наборЗаписей = объект.OpenRecordset (источник, тип, параметры, блокировки) Для объектов QueryDef, Recordset и TableDef: Set наборЗаписей = объект.OpenRecordset (тип, параметры, блокировки)
Параметры
наборЗаписей
Объектная переменная, представляющая
открываемый объект Recordset.
объект
Объектная переменная,
представляющая существующий объект, используемый при создании нового объекта
Recordset.
источник
Выражение или переменная типа
String, определяющая источник записей для нового объекта
Recordset. В качестве источника записей можно указать имя таблицы или
запроса, а также инструкцию SQL, которая возвращает записи. Для
табличного объекта Recordset в базе данных Microsoft Jet в
качестве источника допускается указание только имени
таблицы.
тип
Необязательный. Константа, указывающая тип
открываемого объекта Recordset.
dbOpenTable Открытие табличного объекта Recordset (только в рабочей области ядра Microsoft Jet). dbOpenDynamic Открытие объекта Recordset динамического типа, аналогичного динамическому указателю ODBC (только в рабочей области ODBCDirect). dbOpenDynaset Открытие объекта Recordset типа динамического набора записей, аналогичного указателю ключевого набора записей ODBC. dbOpenSnapshot Открытие объекта Recordset типа статического набора записей, аналогичного указателю статического набора записей ODBC. dbOpenForwardOnly Открытие объекта Recordset типа статического набора записей с последовательным доступом.
параметры
Необязательный. Произвольная комбинация следующих
констант, задающих характеристики нового объекта Recordset.
dbAppendOnly Пользователям разрешается только добавление новых записей в объект Recordset и запрещается изменение или удаление существующих записей (только для объектов Recordset типа динамического набора записей в рабочей области Microsoft Jet). dbSQLPassThrough Передача инструкции SQL для обработки источнику данных ODBC, подключенному к ядру Microsoft Jet (только для объектов Recordset типа статического набора записей в рабочей области Microsoft Jet). dbSeeChanges Генерация ошибки выполнения, если один пользователь изменил данные, редактируемые другим пользователем (только для объектов Recordset типа динамического набора записей в рабочей области Microsoft Jet). Это удобно в ситуациях, когда несколько пользователей имеют доступ для чтения/записи к одним и тем же данным. dbDenyWrite Запрет другим пользователям изменять или добавлять записи (только для объектов Recordset в рабочей области Microsoft Jet). dbDenyRead Запрет другим пользователям на чтение данных в таблице (только для объектов Recordset типа таблицы в рабочей области Microsoft Jet). dbForwardOnly Создание объекта Recordset типа статического набора записей с последовательным доступом (только для объектов Recordset типа статического набора записей в рабочей области Microsoft Jet). Данная константа включена только для совместимости с предыдущими версиями, вместо нее в аргументе тип следует использовать константу dbOpenForwardOnly. dbReadOnly Запрет пользователям на внесение изменений в объект Recordset (только в рабочей области Microsoft Jet). Данная константа включена только для совместимости с предыдущими версиями, вместо нее следует использовать константу dbReadOnly в аргументе блокировки. dbRunAsync Запуск асинхронного запроса (только в рабочей области ODBCDirect). dbExecDirect Запуск запроса без выполнения инструкции SQLPrepare с прямым вызовом инструкции SQLExecDirect (только в рабочей области ODBCDirect). Данный параметр нельзя использовать при открытии объекта Recordset на основе запроса с параметрами. Дополнительные сведения см. в руководстве по программированию Microsoft ODBC 3.0. dbInconsistent Разрешение несогласованных обновлений (только для объектов Recordset типа динамического или статического набора записей в рабочей области Microsoft Jet). dbConsistent Разрешение только согласованных обновлений (только для объектов Recordset типа динамического или статического набора записей в рабочей области Microsoft Jet).
блокировки
Необязательный. Константа, определяющая тип блокировки
объекта Recordset.
dbReadOnly Запрет пользователям на внесение изменений в объект Recordset (настройка по умолчанию для рабочей области ODBCDirect). Использование константы dbReadOnly допускается только в одном из аргументов параметры или блокировки. Если задать эту константы в двух аргументах одновременно, возникает ошибка выполнения. dbPessimistic Использование жесткой блокировки при определении возможности изменения объекта Recordset в многопользовательской среде. Страница, содержащая обрабатываемую запись, блокируется при вызове метода Edit (настройка по умолчанию для рабочей области Microsoft Jet). dbOptimistic Использование нежесткой блокировки при определении возможности изменения объекта Recordset в многопользовательской среде. Страница, содержащая обрабатываемую запись, блокируется при вызове метода Update. dbOptimisticValue Использование нежесткой блокировки при конкурентном доступе на основании значений строк (только в рабочей области ODBCDirect). dbOptimisticBatch Включение режима пакетного обновления с нежесткой блокировкой (только в рабочей области ODBCDirect).
Замечания
В рабочей области ядра Microsoft Jet, если аргумент
объект задает объект QueryDef или объект Recordset типа
динамического набора записей или статического набора записей, а также, если
аргумент источник задает инструкцию SQL или объект TableDef,
представляющий присоединенную таблицу, то не допускается использование константы
dbOpenTable в аргументе тип; в противном случае возникает ошибка
выполнения. Если требуется использовать запрос к серверу SQL для
присоединенной таблицы при подключении ядра Microsoft Jet к источнику
данных ODBC, необходимо сначала указать в свойстве Connect базы
данных, содержащей присоединенную таблицу, допустимую строку подключения
ODBC. Для однократного прохода по объекту Recordset, открытому при
подключении ядра Microsoft Jet к источнику данных ODBC, можно
повысить быстродействие, задав константу dbOpenForwardOnly в аргументе
тип.
Если аргумент объект задает объект Recordset типа динамического
набора записей или статического набора записей, то новый объект Recordset
является объектом того же типа. Если аргумент объект задает табличный объект
Recordset, то новый объект является объектом Recordset типа
динамического набора записей. Не допускается открытие нового объекта
Recordset на основе статического набора записей с последовательным
доступом или объектов Recordset ODBCDirect.
В рабочей области
ODBCDirect возможно открытие Recordset, с указанием более одного
запроса на выборку в аргументе источник, например:
"SELECT Фамилия, Имя FROM Авторы WHERE Фамилия = 'Иванов'; SELECT Заголовок, ISBN FROM Заголовки WHERE Код Like '1-55615-*'"
В возвращенном объекте Recordset будут открыты результаты первого
запроса. Чтобы открыть результаты следующих запросов, следует вызвать метод
NextRecordset.
Пользователь имеет возможность с помощью средств
ODBCDirect отправлять запросы DAO на различные серверы баз данных.
При этом следует помнить, что разные серверы могут использовать различающиеся
диалекты языка SQL. Поэтому из справочной системы исключена контекстная
правка языка Microsoft Jet SQL, хотя интерактивная справочная система
Microsoft Jet SQL по-прежнему доступна в меню. При использовании
подключений ODBCDirect или запросов к серверу в приложения, использующих
подключения через ядро Microsoft Jet, проверяйте по документации сервера,
какой диалект языка SQL использует сервер базы данных.
Константа
dbSeeChanges позволяет в рабочей области Microsoft Jet
перехватывать при работе с записью изменения, вносимые в ту же запись другими
пользователями. Например, если два пользователя начинают изменять одну и ту же
запись, успешно выполнить обновление сможет только пользователь, первым
вызвавший метод Update. При вызове метода Update вторым пользователем возникнет
ошибка при выполнении. Аналогично этому, ошибка выполнения возникает, если
второй пользователь пытается с помощью метода Delete удалить запись, в
которую первый пользователь успел занести изменения.
Обычно, перехват такой
ошибки должен приводить к программному обновлению содержимого полей и загрузке
измененных значений. Если ошибка возникает при попытке удаления, программа
должна вывести новое содержимое записи и сообщение, показывающее, что запись
недавно была изменена. Программа должна запросить подтверждение на удаление
измененной записи.
Кроме того, константу dbSeeChanges следует
использовать, если пользователь открывает объект Recordset при
подключении ядра Microsoft Jet к источнику данных ODBC, который
является таблицей Microsoft SQL Server версии 6.0 (или более поздней) со
столбцом IDENTITY, в противном случае может возникнуть ошибка.
В
рабочей области ODBCDirect допускается выполнение запросов в асинхронном
режиме, задаваемом константой dbRunAsync в аргументе параметры. Это
позволяет приложению продолжать обработку других инструкций во время выполнения
запроса в фоновом режиме. Однако пользователь не сможет в этом случае получить
доступ к данным в объекте Recordset до завершения запроса. Чтобы
определить, закончено ли выполнение запроса, следует проверить значение свойства
StillExecuting нового объекта Recordset. Если выполнение запроса
занимает больше времени, чем предполагается, пользователь имеет возможность
прекратить выполнение с помощью метода Cancel.
Попытка открыть
несколько объектов Recordset на основе одного источника данных
ODBCOpenRecordset. Одним из способов
обойти эту трудность является использование указателя на стороне сервера и
средств ODBCDirect, если они поддерживается сервером. Другим способом
является заполнение объекта Recordset с помощью метода MoveLast
при открытии объекта Recordset.
Если открыть объект Connection
с заданным для свойства DefaultCursorDriver значением
dbUseClientBatchCursor, пользователь имеет возможность открыть объект
Recordset как буфер для измененных данных в рабочей области
ODBCDirect (такой способ называют пакетным обновлением). Для включения
буфера обновления следует указать константу dbOptimisticBatch в аргументе
блокировки. Дополнительные сведения о выборе способа немедленной записи
изменений на диск или способа обновления через буфер с их последующей записью на
диск в пакете см. в разделе справки для метода Update.
Закрытие
объекта Recordset с помощью метода Close приводит к
автоматическому удалению объекта из семейства Recordsets.
Если в
аргументе источник указана инструкция SQL, образованная путем слияния
строки с нецелым числовым значением, а в системной настройке задано
использование неамериканского символа десятичного разделителя, такого как
запятая (например, strSQL = "ЦЕНА > " & lngPrice, где lngPrice
= 125,50), то при попытке открыть объект Recordset возникает ошибка.
Причина заключается в том, что число преобразуется в строковое значение с
использованием текущей системной настройки, а в языке SQL распознается
только американский символ разделителя целой и дробной части (десятичная
точка).
Пример
Следующая программа использует метод OpenRecordset для
открытия пяти объектов Recordset и отображения их содержимого. Для
выполнения данной процедуры требуется процедура OpenRecordsetOutput.
Sub OpenRecordsetX() Dim wrkJet As Workspace Dim wrkODBC As Workspace Dim dbsNorthwind As Database Dim conPubs As Connection Dim rstTemp As Recordset Dim rstTemp2 As Recordset ' Открывает сеансы Microsoft Jet и ODBCDirect, базу данных ' Microsoft Jet и подключение ODBCDirect. Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet) Set wrkODBC = CreateWorkspace("", "admin", "", dbUseODBC) Set dbsNorthwind = wrkJet.OpenDatabase("Борей.mdb") Set conPubs = wrkODBC.OpenConnection("", , , "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers") ' Открывает пять объектов Recordset и отображает ' содержимое каждого объекта. Debug.Print "С последовательным доступом, " & "где источником является объект QueryDef..." Set rstTemp = dbsNorthwind.OpenRecordset( "Десять самых дорогих товаров", dbOpenForwardOnly) OpenRecordsetOutput rstTemp Debug.Print "Динамический набор записей только для чтения, " & "где источником является инструкция SQL..." Set rstTemp = dbsNorthwind.OpenRecordset( "SELECT * FROM Сотрудники", dbOpenDynaset, dbReadOnly) OpenRecordsetOutput rstTemp ' Использует свойство Filter для отбора записей ' при следующем вызове метода OpenRecordset. Debug.Print "Отбор записей из существующего " & "объекта Recordset..." rstTemp.Filter = "Фамилия >= 'Ж'" Set rstTemp2 = rstTemp.OpenRecordset() OpenRecordsetOutput rstTemp2 Debug.Print "Набор записей динамического типа " & "для подключения ODBC..." Set rstTemp = conPubs.OpenRecordset( "SELECT * FROM stores", dbOpenDynamic) OpenRecordsetOutput rstTemp ' С помощью свойства StillExecuting проверяет, готов ли ' объект Recordset для обработки. Debug.Print "Статический набор записей на основе " & "асинхронного запроса для подключения ODBC..." Set rstTemp = conPubs.OpenRecordset("publishers", dbOpenSnapshot, dbRunAsync) Do While rstTemp.StillExecuting Debug.Print " [еще выполняется...]" Loop OpenRecordsetOutput rstTemp rstTemp.Close dbsNorthwind.Close conPubs.Close wrkJet.Close wrkODBC.Close End Sub Sub OpenRecordsetOutput(rstOutput As Recordset) ' Отображает указанный объект Recordset. With rstOutput Do While Not .EOF Debug.Print , .Fields(0), .Fields(1) .MoveNext Loop End With End Sub